package com.whty.system.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.whty.common.support.Convert;
import com.whty.system.domain.TagInfo;
import com.whty.system.mapper.TagInfoMapper;
import com.whty.system.service.IGardenService;
import com.whty.system.service.ISysDictDataService;
import com.whty.system.service.ITagInfoService;

/**
 * 标签 服务层实现
 * 
 * @author mario
 * @date 2018-10-31
 */
@Service
public class TagInfoServiceImpl implements ITagInfoService 
{
	@Autowired
	private TagInfoMapper tagInfoMapper;
	@Autowired
	private ISysDictDataService iSysDictDataService;
	@Autowired
	private IGardenService iGardenService;
	

	/**
     * 查询标签信息
     * 
     * @param id 标签ID
     * @return 标签信息
     */
    @Override
	public TagInfo selectTagInfoById(Integer id)
	{
	    return tagInfoMapper.selectTagInfoById(id);
	}
	
	/**
     * 查询标签列表
     * 
     * @param tagInfo 标签信息
     * @return 标签集合
     */
	@Override
	public List<TagInfo> selectTagInfoList(TagInfo tagInfo)
	{
	    return tagInfoMapper.selectTagInfoList(tagInfo);
	}
	
    /**
     * 新增标签
     * 
     * @param tagInfo 标签信息
     * @return 结果
     */
	@Override
	public int insertTagInfo(TagInfo tagInfo)
	{
		tagInfo.setUpdateTime(new Date());
	    return tagInfoMapper.insertTagInfo(tagInfo);
	}
	
	/**
     * 修改标签
     * 
     * @param tagInfo 标签信息
     * @return 结果
     */
	@Override
	public int updateTagInfo(TagInfo tagInfo)
	{
		tagInfo.setUpdateTime(new Date());
	    return tagInfoMapper.updateTagInfo(tagInfo);
	}

	/**
     * 删除标签对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
	@Override
	public int deleteTagInfoByIds(String ids)
	{
		return tagInfoMapper.deleteTagInfoByIds(Convert.toStrArray(ids));
	}
    
	/*
	 * 从源头控制 字符的长度 ，汉字占两个长度，字符占一个长度
	 */
	@Override
	public String dataValidation(TagInfo tagInfo) {
		String result="00";
		if(tagInfo.getTagQuence()!=null){
			if(tagInfo.getTagQuence().length()>14){
//				return "标签序列号长度不正确，14位字符";
				return restr("标签序列号",14);
			}
		}if(tagInfo.getProductCode()!=null){
			if(tagInfo.getProductCode().length()>20){
//				return "溯源码长度不正确，20位字符";
				return restr("溯源码",20);
			}
		}if(tagInfo.getCompanyName()!=null){
			if(length(iGardenService.selectGardenName(tagInfo.getCompanyName()))>14){
//				return "生产企业名称长度不正确，14个长度，汉字占用两个长度";
				return restr("生产企业名称",14);
			}
		}if(tagInfo.getProductName()!=null){
			if(length(tagInfo.getProductName())>14){
//				return "产品名称长度不正确，14个长度";
				return restr("产品名称",14);
			}
		}if(tagInfo.getMaterialSource()!=null){
			if(length(tagInfo.getMaterialSource())>14){
//				return "原料来源长度不正确，14个长度";
				return restr("原料来源",14);
			}
		}if(tagInfo.getProcessTech()!=null){
//			if(length(iSysDictDataService.selectDictLabel("gh_process_tech", tagInfo.getProcessTech()))>4){
			if(length(tagInfo.getProcessTech())>4){
//				return "加工工艺长度不正确，14个长度";
				return restr("加工工艺",4);
			}
		}if(tagInfo.getProductDate()!=null){
			if(length(tagInfo.getProductDate())>6){
//				return "标签序列号长度不正确，14位字符";
				return restr("生产日期",6);
			}
		}if(tagInfo.getBatchNo()!=null){
			if(tagInfo.getBatchNo().length()>14){
//				return "标签序列号长度不正确，14位字符";
				return restr("批号",14);
			}
		}if(tagInfo.getProductRank()!=null){
			if(tagInfo.getProductRank().length()>2){
//				return "标签序列号长度不正确，14位字符";
				return restr("产品质量等级",2);
			}
		}if(tagInfo.getExpiredDate()!=null){
			if(tagInfo.getExpiredDate().length()>6){
//				return "标签序列号长度不正确，14位字符";
				return restr("保质期",6);
			}
		}if(tagInfo.getProductCertNum()!=null){
			if(tagInfo.getProductCertNum().length()>20){
//				return "标签序列号长度不正确，14位字符";
				return restr("产品质量认证证书编号",20);
			}
		}if(tagInfo.getDealerName()!=null){
			if(length(tagInfo.getDealerName())>12){
//				return "标签序列号长度不正确，14位字符";
				return restr("经销商名称",12);
			}
		}if(tagInfo.getSaleTime()!=null){
			if(tagInfo.getSaleTime().length()>6){
//				return "标签序列号长度不正确，14位字符";
				return restr("销售时间",6);
			}
		}		
		return result;
	}
	
	
	public String restr(String name,int i){
		
		return name+"长度不正确，最大长度"+i;
	}
	
	/**
	 * 获取字符串的长度，如果有中文，则每个中文字符计为2位
	 * 
	 * @param value
	 *            指定的字符串
	 * @return 字符串的长度
	 */
	public static int length(String value) {
		int valueLength = 0;
		String chinese = "[\u0391-\uFFE5]";
		/* 获取字段值的长度，如果含中文字符，则每个中文字符长度为2，否则为1 */
		for (int i = 0; i < value.length(); i++) {
			/* 获取一个字符 */
			String temp = value.substring(i, i + 1);
			/* 判断是否为中文字符 */
			if (temp.matches(chinese)) {
				/* 中文字符长度为2 */
				valueLength += 2;
			} else {
				/* 其他字符长度为1 */
				valueLength += 1;
			}
		}
		return valueLength;
	}
	
}
